package com.anonymous.community.api;

import com.anonymous.community.api.model.*;

import retrofit2.Call;
import retrofit2.http.*;

/**
 * API Service接口
 * 基于API文档 v3.0.0
 */
public interface ApiService {
    
    // ==================== 认证相关接口 ====================
    
    /**
     * 1. 发送验证码
     * POST /v1/api/auth/send-code
     */
    @POST("v1/api/auth/send-code")
    Call<GenericResponse> sendCode(@Body SendCodeRequest request);
    
    /**
     * 2. 用户注册
     * POST /v1/api/auth/register
     */
    @POST("v1/api/auth/register")
    Call<RegisterResponse> register(@Body RegisterRequest request);
    
    /**
     * 3. 用户登录
     * POST /v1/api/auth/login
     */
    @POST("v1/api/auth/login")
    Call<LoginResponse> login(@Body LoginRequest request);
    
    /**
     * 4. 验证邮箱验证码
     * POST /v1/api/auth/verify-email-code
     */
    @POST("v1/api/auth/verify-email-code")
    Call<VerifyCodeResponse> verifyEmailCode(@Body VerifyCodeRequest request);
    
    /**
     * 5. 重置密码
     * POST /v1/api/auth/reset-password
     */
    @POST("v1/api/auth/reset-password")
    Call<GenericResponse> resetPassword(@Body ResetPasswordRequest request);
    
    /**
     * 6. 管理账户状态（申请删除）
     * POST /v1/api/auth/manage-account
     */
    @POST("v1/api/auth/manage-account")
    Call<GenericResponse> manageAccount(@Header("Authorization") String token);
    
    /**
     * 7. 取消删除账户
     * POST /v1/api/auth/confirm-cancel-delete
     */
    @POST("v1/api/auth/confirm-cancel-delete")
    Call<GenericResponse> confirmCancelDelete(@Header("Authorization") String token);
    
    /**
     * 8. 用户登出
     * POST /v1/api/auth/logout
     */
    @POST("v1/api/auth/logout")
    Call<GenericResponse> logout(@Header("Authorization") String token);
    
    // ==================== 帖子相关接口 ====================
    
    /**
     * 1. 创建帖子
     * POST /v1/api/posts
     */
    @POST("v1/api/posts")
    Call<CreatePostResponse> createPost(@Header("Authorization") String token, @Body CreatePostRequest request);
    
    /**
     * 2. 获取帖子列表
     * GET /v1/api/posts
     */
    @GET("v1/api/posts")
    Call<PostListResponse> getPosts(
            @Query("page") Integer page,
            @Query("page_size") Integer pageSize,
            @Query("sort") String sort,
            @Query("include_unapproved") Boolean includeUnapproved
    );
    
    /**
     * 3. 获取单个帖子
     * GET /v1/api/posts/{post_id}
     */
    @GET("v1/api/posts/{post_id}")
    Call<PostDetailResponse> getPostDetail(@Path("post_id") int postId);
    
    /**
     * 4. 删除帖子
     * DELETE /v1/api/posts/{post_id}
     */
    @DELETE("v1/api/posts/{post_id}")
    Call<GenericResponse> deletePost(@Header("Authorization") String token, @Path("post_id") int postId);
    
    // ==================== 评论相关接口 ====================
    
    /**
     * 1. 创建评论
     * POST /v1/api/posts/{post_id}/comments
     */
    @POST("v1/api/posts/{post_id}/comments")
    Call<CreateCommentResponse> createComment(
            @Header("Authorization") String token,
            @Path("post_id") int postId,
            @Body CreateCommentRequest request
    );
    
    /**
     * 2. 获取评论列表
     * GET /v1/api/posts/{post_id}/comments
     */
    @GET("v1/api/posts/{post_id}/comments")
    Call<CommentListResponse> getComments(
            @Path("post_id") int postId,
            @Query("page") Integer page,
            @Query("page_size") Integer pageSize
    );
    
    /**
     * 3. 获取评论树
     * GET /v1/api/posts/{post_id}/comments/tree
     */
    @GET("v1/api/posts/{post_id}/comments/tree")
    Call<CommentTreeResponse> getCommentTree(
            @Path("post_id") int postId,
            @Query("max_depth") Integer maxDepth,
            @Query("sort") String sort
    );
    
    /**
     * 4. 删除评论
     * DELETE /v1/api/posts/{post_id}/comments/{comment_id}
     */
    @DELETE("v1/api/posts/{post_id}/comments/{comment_id}")
    Call<GenericResponse> deleteComment(
            @Header("Authorization") String token,
            @Path("post_id") int postId,
            @Path("comment_id") int commentId
    );
    
    // ==================== 点赞相关接口 ====================
    
    /**
     * 1. 切换点赞状态
     * POST /v1/api/posts/like/{target_type}/{target_id}
     */
    @POST("v1/api/posts/like/{target_type}/{target_id}")
    Call<LikeResponse> toggleLike(
            @Header("Authorization") String token,
            @Path("target_type") String targetType,
            @Path("target_id") int targetId
    );
    
    // ==================== 举报相关接口 ====================
    
    /**
     * 1. 举报帖子
     * POST /v1/api/posts/{post_id}/report
     */
    @POST("v1/api/posts/{post_id}/report")
    Call<GenericResponse> reportPost(
            @Header("Authorization") String token,
            @Path("post_id") int postId,
            @Body ReportRequest request
    );
    
    /**
     * 2. 举报评论
     * POST /v1/api/posts/{post_id}/comments/{comment_id}/report
     */
    @POST("v1/api/posts/{post_id}/comments/{comment_id}/report")
    Call<GenericResponse> reportComment(
            @Header("Authorization") String token,
            @Path("post_id") int postId,
            @Path("comment_id") int commentId,
            @Body ReportRequest request
    );
    
    // ==================== 健康检查接口 ====================
    
    /**
     * 健康检查
     * GET /v1/api/health
     */
    @GET("v1/api/health")
    Call<HealthResponse> health();
    
    // ==================== 管理员接口 ====================
    
    /**
     * 获取所有用户
     * GET /v1/api/admin/users
     */
    @GET("v1/api/admin/users")
    Call<UserListResponse> getAdminUsers(
            @Header("Authorization") String token,
            @Query("page") Integer page,
            @Query("page_size") Integer pageSize
    );
    
    /**
     * 创建用户（管理员）
     * POST /v1/api/admin/users
     */
    @POST("v1/api/admin/users")
    Call<CreateUserResponse> createUser(
            @Header("Authorization") String token,
            @Body CreateUserRequest request
    );
    
    /**
     * 设置用户管理员状态
     * POST /v1/api/admin/users/{user_id}/admin-status
     */
    @POST("v1/api/admin/users/{user_id}/admin-status")
    Call<GenericResponse> setUserAdminStatus(
            @Header("Authorization") String token,
            @Path("user_id") int userId,
            @Body SetAdminStatusRequest request
    );
    
    /**
     * 封禁/解封用户
     * POST /v1/api/admin/users/{user_id}/ban
     */
    @POST("v1/api/admin/users/{user_id}/ban")
    Call<GenericResponse> banUser(
            @Header("Authorization") String token,
            @Path("user_id") int userId,
            @Body BanUserRequest request
    );
    
    /**
     * 获取待审核帖子
     * GET /v1/api/admin/posts/pending
     */
    @GET("v1/api/admin/posts/pending")
    Call<PendingPostsResponse> getPendingPosts(
            @Header("Authorization") String token,
            @Query("page") Integer page,
            @Query("page_size") Integer pageSize
    );
    
    /**
     * 审核帖子
     * PUT /v1/api/admin/posts/{post_id}/moderate
     */
    @PUT("v1/api/admin/posts/{post_id}/moderate")
    Call<GenericResponse> moderatePost(
            @Header("Authorization") String token,
            @Path("post_id") int postId,
            @Body ModeratePostRequest request
    );
    
    /**
     * 获取评论举报列表
     * GET /v1/api/admin/comments/reports
     */
    @GET("v1/api/admin/comments/reports")
    Call<ReportListResponse> getCommentReports(
            @Header("Authorization") String token,
            @Query("status") String status,
            @Query("page") Integer page,
            @Query("page_size") Integer pageSize
    );
    
    /**
     * 处理评论举报
     * PUT /v1/api/admin/comments/reports/{report_id}/handle
     */
    @PUT("v1/api/admin/comments/reports/{report_id}/handle")
    Call<GenericResponse> handleCommentReport(
            @Header("Authorization") String token,
            @Path("report_id") int reportId,
            @Body HandleReportRequest request
    );
}
